# list: 列表数据类型。类似java的ArrayList
# 使用[]声明列表，不需要声明长度，添加和删除元素时，会自动扩容和缩容
my_list = [1, 2, 3]
# 打印一下
print("my_list", my_list)
print("my_list数据类型", type(my_list))

# 空列表
my_list2: list[int] = []
print("my_list2", my_list2)
my_list2.append(1)
print("my_list2添加元素", my_list2)

# 列表可以存储不同的数据类型。但是不建议
list2 = [1, 2, 3, True, False, 'hello']
print("list2可以存储不同的数据类型", list2)

list3 = list('12345678')  # 类型转换：str-->list
print(f"list3 = {list3}")

# 成员运算
print("成员运算in: ", 1 in list2)
print("成员运算not in: ", 9 not in list2)

# 遍历列表
for my in my_list:
    print(f"列表中的元素是: {my}")

# 使用下标的方式进行遍历，能够获取到索引
for i in range(len(list2)):
    print(i, list2[i])

# 添加元素
my_list.append(4)
print(my_list)

# 指定索引添加元素
my_list.insert(0, 0)
print("my_list指定索引添加元素", my_list)

# 添加列表 类似java的addAll
my_list.extend([5, 6, 7])
print("my_list添加列表", my_list + [8, 9])

# 查找元素
data = my_list.index(4)
print("查找元素索引", my_list.index(4))

# 删除元素
my_list.remove(1)
print(f"根据元素删除: {my_list}")

# 根据索引删除元素
my_list.pop(0)
print(f"根据索引删除: {my_list}")

# 修改元素
my_list[0] = 100
print(f"修改元素: {my_list}")

# 排序列表
# 默认升序
my_list.sort()
print("列表升序排序", my_list)
# 倒序
my_list.sort(reverse=True)
print("列表降序排序", my_list)

# 清空列表
my_list.clear()
print("清空列表", my_list)

age = [10, 20, 30, 40, 23, 45, 78, 43]
print(f"总人数为: {len(age)}, 平均年龄为: {sum(age) / len(age)}")
